package com.yang.system.domain.orgMng.org.validator;

import com.yang.system.domain.common.exception.BusinessException;
import com.yang.system.domain.orgMng.orgType.OrgTypeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import static org.apache.logging.log4j.util.Strings.isBlank;

@Component
public class OrgTypeValidator {

    private final OrgTypeRepository orgTypeRepository;

    @Autowired
    public OrgTypeValidator(OrgTypeRepository orgTypeRepository) {
        this.orgTypeRepository = orgTypeRepository;
    }

    //校验组织类别的规则分组
    private void verifyOrgType(Long tenantId, String orgType) {
        orgTypeShouldNotEmpty(orgType);
        orgTypeShouldBeValid(tenantId, orgType);
        shouldNotCreateEntpAlone(orgType);
    }

    // 组织类别不能为空
    private void orgTypeShouldNotEmpty(String orgType) {
        if (isBlank(orgType)) {
            throw new BusinessException("组织类型不能为空");
        }
    }

    // 组织类别必须有效
    private void orgTypeShouldBeValid(Long tenantId,String orgType) {
        if (!orgTypeRepository.existsByCodeAndStatus(tenantId, orgType)) {
            throw new BusinessException("'" + orgType + "'不是有效的组织类别代码！");
        }
    }

    // 企业是在创建租户的时候创建好的，因此不能单独创建企业
    private void shouldNotCreateEntpAlone(String orgType) {

        if ("ENTP".equals(orgType)) {
            throw new BusinessException("企业是在创建租户的时候创建好的，因此不能单独创建");
        }
    }

    public void verify(Long tenantId, String orgTypeCode) {
        verifyOrgType(tenantId, orgTypeCode);
    }
}
